import { router,addRoutes } from "@/router"
import { getToken } from "@/composables/auth"
import { 
    toast,
    showFullLoading,
    hideFullLoading
} from "@/composables/util"
import { verifyToken } from "@/api/common/web.js"
import store from "./store"

// 全局前置守卫
let hasGetInfo = false
router.beforeEach(async (to,from,next)=>{
    // 显示loading
    showFullLoading()

    const token = getToken()
    console.log(to.path.toString())
    console.log("开头字符串" + to.path.startsWith("/admin/"));

    // 访问后台管理系统没有登录，强制跳转回登录页
    if (!token && to.path.startsWith("/admin") && to.path !== "/login") {
        toast("请先登录", "error");
        return next({ path: "/login" });
    }


    // 如果用户登录了，自动获取用户信息，并存储在vuex当中,这也是为了刷新之后数据丢失
    let hasNewRoutes = false
    if(token && !hasGetInfo){
        let menus = await store.dispatch("getMenus")
        console.log("获取到菜单" + menus)

        //发送token给服务端验证，然后服务端返回用户信息再次存储在store中,不需要传递参数，因为header里面已经有了token
        await store.dispatch("getinfo") //因为getinfo最开始一次是在登录的时候进行

        hasGetInfo = true
        // 动态添加路由
        hasNewRoutes = addRoutes(menus)
        hasNewRoutes = true
    }

    // 设置页面标题
    let title = (to.meta.title ? to.meta.title : "") + "-后台管理系统"
    document.title = title

    hasNewRoutes ? next(to.fullPath) : next()
})

// 全局后置守卫
router.afterEach((to, from) => hideFullLoading())
